package com.sy.core.base.service;

import com.sy.core.base.common.Page;
import com.sy.core.base.model.SimpleModel;
import com.sy.core.exception.BaseException;

import java.util.List;
import java.util.Map;

/**
 * 业务逻辑层接口
 *
 * @param <T>
 */
public interface IBaseService<T  extends SimpleModel> {

    /**
     * 通过map查找集合
     *
     * @param m
     * @return
     */
    public List<T> findListByMap(Map<String, Object> m) throws BaseException;

    /**
     * 通用分页方法
     *
     * @param page
     * @param m
     * @return
     */
    Page<?> getPage(Page<?> page, Map<String, Object> m) throws BaseException;


    /**
     * 获取对象集合
     *
     * @param
     * @return
     */
    public List<T> getList() throws BaseException;

    /**
     * 新增业务对象
     *
     * @param object
     * @return
     */
    public void add(T object) throws BaseException;

    /**
     * 编辑业务对象
     *
     * @param object
     * @return
     * @throws BaseException
     */
    public T edit(T object) throws BaseException;

    /**
     * 根据id获取业务对象
     *
     * @param id
     * @return
     */
    public T get(String id) throws BaseException;


    /**
     * 根据id删除单个业务对象，返回删除的记录数
     *
     * @param id
     */
    public int remove(String id) throws BaseException;

    /**
     * 根据id数组删除多个业务对象，返回删除的记录数
     *
     * @param idArr
     */
    public int removeByIdArr(String[] idArr) throws BaseException;

    /**
     * 根据多个id删除多个业务对象，id以,隔开，返回删除的记录数
     *
     * @param ids
     */
    public int removeByIds(String ids) throws BaseException;

    /**
     * 获取对象分页集合
     *
     * @param page
     * @param m
     * @return
     */
    public Page<?> getPageSimple(Page<?> page, Map<String, Object> m)
            throws BaseException;

    /**
     * 获取对象集合
     *
     * @param m
     * @return
     */
    public List<T> findListByMapSimple(Map<String, Object> m)
            throws BaseException;

    /**
     * 获取对象集合
     *
     * @param
     * @return
     */
    public List<T> getListSimple() throws BaseException;

    /**
     * 新增业务对象
     *
     * @param object
     * @return
     */
    public void addSimple(T object) throws BaseException;

    /**
     * 编辑业务对象
     *
     * @param object
     * @return
     * @throws BaseException
     */
    public T editSimple(T object) throws BaseException;



    /**
     * 根据id删除单个业务对象，返回删除的记录数
     *
     * @param id
     */
    public int removeSimple(String id) throws BaseException;

    /**
     * 根据id数组删除多个业务对象，返回删除的记录数
     *
     * @param idArr
     */
    public int removeByIdArrSimple(String[] idArr) throws BaseException;

    /**
     * 根据多个id删除多个业务对象，id以,隔开，返回删除的记录数
     *
     * @param ids
     */
    public int removeByIdsSimple(String ids) throws BaseException;

    T updateNotNull(T object) throws BaseException;
}
